// using UnityEngine;
// using BenchmarkDotNet.Running;
// using BenchmarkDotNet.Configs;
// using BenchmarkDotNet.Diagnosers;
// using BenchmarkDotNet.Jobs;
// using NUnit;
// using NUnit.Framework;
//
// [TestFixture]
// public class BoxingBenchmarkRunner
// {
//     [Header("Benchmark Settings")]
//     public bool runOnStart = false;
//     public bool enableMemoryDiagnostics = true;
//
//     public  void Start()
//     {
//         if (runOnStart)
//         {
//             RunBoxingBenchmarks();
//         }
//     }
//
//     [ContextMenu("Run Boxing Benchmarks")]
//     public void RunBoxingBenchmarks()
//     {
//         Debug.Log("Starting Boxing/Unboxing Performance Tests...");
//
//         // 创建适合Unity环境的配置
//         var config = DefaultConfig.Instance
//             .With(Job.Default
//                 .WithWarmupCount(2)
//                 .WithIterationCount(10)
//                 .WithLaunchCount(1));
//
//         if (enableMemoryDiagnostics)
//         {
//             config = config.With(MemoryDiagnoser.Default);
//         }
//
//         // 运行性能测试
//         var summary = BenchmarkRunner.Run<Demo7>(config);
//
//         // 在Unity控制台输出关键信息
//         Debug.Log("Boxing/Unboxing Benchmark Completed!");
//         Debug.Log($"Total tests: {summary.Reports.Length}");
//         
//         foreach (var report in summary.Reports)
//         {
//             var methodName = report.BenchmarkCase.Descriptor.WorkloadMethod.Name;
//             var meanTime = report.ResultStatistics.Mean;
//             var allocatedMemory = report.Metrics.ContainsKey("Allocated Memory") 
//                 ? report.Metrics["Allocated Memory"].Value 
//                 : 0;
//             
//             Debug.Log($"{methodName}: Mean = {meanTime:F3} ns, Allocated = {allocatedMemory} bytes");
//         }
//     }
//
//     // 快速测试单个方法
//     [ContextMenu("Quick Boxing Test")]
//     public void QuickBoxingTest()
//     {
//         var examples = new BoxingUnboxingExamples();
//         var stopwatch = new System.Diagnostics.Stopwatch();
//
//         // 测试简单装箱拆箱
//         stopwatch.Start();
//         for (int i = 0; i < 10000; i++)
//         {
//             examples.SimpleBoxing(i);
//         }
//         stopwatch.Stop();
//         Debug.Log($"Simple Boxing: {stopwatch.ElapsedMilliseconds} ms");
//
//         // 测试泛型集合（无装箱）
//         stopwatch.Restart();
//         for (int i = 0; i < 10000; i++)
//         {
//             examples.NoBoxingInGenericList();
//         }
//         stopwatch.Stop();
//         Debug.Log($"Generic List (No Boxing): {stopwatch.ElapsedMilliseconds} ms");
//
//         // 计算性能差异
//         var boxingTime = stopwatch.ElapsedMilliseconds;
//         Debug.Log($"Performance difference: ~{boxingTime / 10}%");
//     }
// }
